#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL.h>
#include "smpeg.h"
#include "perso.h"
#include <SDL/SDL_framerate.h>

#define JUMP_POWER_MAX 20

int jeu(SDL_Surface *ecran)
{
    int num,position;
	SDL_Surface  *personnage[5]= {NULL} ;
	SDL_Rect positionPersonnage;
    SDL_Event event2;
    int continuer = 1;
	int maxW, maxH,video_mode = 0;
    maxW=1000;
    maxH=700; 
    int boutton =0 ;

    int power = 0;
    int jump = 0;

    FPSmanager fps;
    SDL_initFramerate(&fps);
    SDL_setFramerate(&fps,60);


SDL_Rect  pos_animation;
     
    

    SDL_Rect ballpos = {304,50};

    FILE* video = NULL;
    video = fopen("menu/options/video.txt", "r");
    if (video != NULL)
    {
        
        fscanf(video, "%d",&video_mode);
        if (video_mode ==1)
        {
            

            ecran = SDL_SetVideoMode(0, 0, 0, SDL_FULLSCREEN | SDL_DOUBLEBUF); //SDL_FULLSCREEN
            if (ecran == NULL)
            {
                fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
                exit(EXIT_FAILURE);
            }
            const SDL_VideoInfo *videoInfo;
 
            videoInfo=SDL_GetVideoInfo();
            maxW=videoInfo->current_w;
            maxH=videoInfo->current_h;
        }

        if (video_mode ==0)
        {
            ecran = SDL_SetVideoMode(maxW, maxH, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); //SDL_FULLSCREEN
    if (ecran == NULL)
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }

        }
    fclose(video); // On ferme le fichier qui a été ouvert

    }

	
    
    positionPersonnage.x =50;
    positionPersonnage.y = 300;
    position = positionPersonnage.x;
    num=2;

    chargement_personnage(personnage);
    pos_animation.x = positionPersonnage.x;
pos_animation.y = positionPersonnage.y;

     
    while (continuer)
    {
        SDL_PollEvent(&event2);;
        switch(event2.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                
                switch(event2.key.keysym.sym)
                {
                    case SDLK_UP: // Flèche haut
                         if (positionPersonnage.y+positionPersonnage.h == ecran->h)
                         {
                            jump = 1;
                        power = JUMP_POWER_MAX;
                         }
                         

                        break;
                    case SDLK_DOWN: // Flèche bas
                        positionPersonnage.y++;
                        break;
                    case SDLK_RIGHT: // Flèche droite
                        
                        boutton=1;
                        
                            
                            
                        
                        break;
                    case SDLK_LEFT: // Flèche gauche
                        positionPersonnage.x= positionPersonnage.x-50;
                        break;
                }
                break;
                case SDL_KEYUP:
                    boutton=0;
                    position = positionPersonnage.x;
                    jump = 0;

                break;
               
        }
    
         

        
        
        if (boutton==1)
        {   
            SDL_BlitSurface(personnage[num], NULL, ecran, &positionPersonnage);
            positionPersonnage.x= positionPersonnage.x+5;
            if (((positionPersonnage.x - position)%100) ==0)
            {   num =num+1;
                
                position=positionPersonnage.x; 
                pos_animation.x = position; 
              
            }
            if (num==5)
            {
                num=1;
            }
        }
        if(jump)
        {
            // En augmenet la position y avec la variable power
            positionPersonnage.y -= power;

            // la variable power diminue ce qui donne un effet de ralentissement
            power--;

            // Si pas de puissance (power == 0) en met jump a 0
            if(power == 0)
            jump = 0;
        }

        /// Si en chute
        else if(positionPersonnage.y+positionPersonnage.h < ecran->h)
        {
            // En diminue la position y avec la variable power
            positionPersonnage.y += power;

            /* la variable power augement ce qui donne un effet d'acceleration
            en ne depassant pas JUMP_POWER_MAX */
            if(power < JUMP_POWER_MAX)
            power++;
        }

        // Ajustement pour que la ball ne depasse pas le sol
        if(positionPersonnage.y+positionPersonnage.h > ecran->h)
        positionPersonnage.y = ecran->h-positionPersonnage.h;
        int frame ;

        SDL_FillRect(ecran,0,100);
        if (boutton==1)
        {
        SDL_BlitSurface(personnage[num], NULL, ecran, &positionPersonnage);
        }
        if (boutton==0)
        {
            SDL_BlitSurface(personnage[0], NULL, ecran, &positionPersonnage);
            num=2;
        }
        SDL_framerateDelay(&fps);
        SDL_Flip(ecran);
    }

    
    
    SDL_Quit();
    
    return EXIT_SUCCESS;
}



